﻿using Manon.Autofac;
using Manon.Core.Commons;
using Manon.Gateway.ApplicationCore.Dtos;
using Manon.Gateway.ApplicationCore.Dtos.Routes;
using Manon.Repository.Collections;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Manon.Gateway.ApplicationCore.Interfaces
{
    public interface IRouteService : ISingletonDependency
    {

        /// <summary>
        /// 获取项目分页列表
        /// </summary>
        /// <param name="Input"></param>
        /// <returns></returns>
        Task<IPagedList<GetProjectPageListOutput>> GetProjectPageList(GetProjectPageListInput Input);

        /// <summary>
        /// 获取项目信息
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        Task<GetProjectOutput> GetProject(int Id);

        /// <summary>
        /// 设置项目启用/禁用
        /// </summary>
        /// <param name="Id"></param>
        /// <param name="Enabled"></param>
        /// <returns></returns>
        Task<Result> SetProjectEnabled(int Id, bool Enabled);


        /// <summary>
        /// 保存项目
        /// </summary>
        /// <param name="Input"></param>
        /// <returns></returns>
        Task<Result> SaveProject(SaveProjectInput Input);


        /// <summary>
        /// 保存路由设置
        /// </summary>
        /// <param name="Input"></param>
        /// <returns></returns>
        Task<Result> SaveRoute(SaveRouteInput Input);

        /// <summary>
        /// 获取路由信息
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        Task<GetRoutesOutput> GetRoutes(int Id);

        /// <summary>
        /// 获取项目路由分页列表
        /// </summary>
        /// <param name="Input"></param>
        /// <returns></returns>
        Task<IPagedList<GetProjectRoutesPageListOutput>> GetProjectRoutesPageList(GetProjectRoutesPageListInput Input);

        /// <summary>
        /// 获取所有路由
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        Task<List<GetAllRoutesOutput>> GetAllRoutes();
    }
}
